﻿using System;
using System.Data.Entity.SqlServer;
using System.Linq;
using System.Threading;
using Common.Logging;
using OutDbContext;
using Quartz;
using User.Api.BizExtensions;
using User.Api.Helpers;

namespace Out.TaskRunner.QuartzJobs
{
    //public class SendNotificationJob: IJob
    //{
    //    private static readonly ILog Logger = LogManager.GetLogger(typeof(SendNotificationJob));


    //    public void Execute(IJobExecutionContext context)
    //    {
    //        Logger.InfoFormat("Executing job: {0}", context.JobDetail.Key);

    //        SendNotification();
    //    }

    //    public void SendNotification()
    //    {
    //        Console.WriteLine("[{0}] 发送预约报到通知", DateTime.Now.ToString("MM-dd HH:mm:ss"));

    //        //查询要发通知的记录
    //        using (var ctx = new HzfyWeiXinEntities())
    //        {
    //            var signInNotices = ctx.SignInNotice.Where(x => SqlFunctions.DateDiff("SECOND", x.NeedSendTime, SqlFunctions.GetDate()) > 0 && x.IsSended == 0).Take(30).ToList();
    //            foreach (var signInNotice in signInNotices)
    //            {
    //                #region 更新信息
    //                //更新表信息,查询是否已经发送,判断是否已经过期
    //                // IsSend : 0-未发送 1-已发送 2-已报到，未发送,3 过了最后发送时间，未发送

    //                    if (signInNotice == null)
    //                        return;

    //                    var card = ctx.HospCard.FirstOrDefault(x => x.CardNo == signInNotice.CardNo);
    //                    if (card == null)
    //                        return;

    //                    signInNotice.Name = card.PatientName;
    //                    signInNotice.PatientId = card.PatientId;
    //                    signInNotice.SendUserCount = 1; //只向支付用户发送通知                                

    //                    if (System.DateTime.Now > signInNotice.DeadlineToSend)
    //                        signInNotice.IsSended = 3;

    //                    var apptOrder = ctx.ApptOrder.FirstOrDefault(x => x.OrderNo == signInNotice.OrderNo);
    //                    if (apptOrder == null)
    //                    {
    //                        return;
    //                    }

    //                    if (apptOrder.OrderStatus != ApptOrderExtensions.OrderStatus.取号成功.ToInt32())
    //                        signInNotice.IsSended = 2;//已报到

    //                    var wxUser = ctx.WxUser.FirstOrDefault(x => x.Id == apptOrder.WxUserId);

    //                    if (wxUser == null)
    //                        return;

    //                    var openId = wxUser.OpenId;
    //                    signInNotice.UpdateTime = System.DateTime.Now;
    //                    ctx.SaveChanges();

    //                #endregion
    //                if (signInNotice.IsSended > 0)
    //                    return;

    //               Console.WriteLine("【微信预约订单】发现预约报到订单(ID:{0}),执行发送预约报到通知", apptOrder.Id);

    //                #region  生成签名与url 
    //                //var paramDic = new Dictionary<string, string>();
    //                //paramDic.Add("orderId", apptOrder.Id.ToString());
    //                //paramDic.Add("cardId", card.Id.ToString()); ;
    //                //paramDic.Add("patientName", card.PatientName);
    //                //paramDic.Add("cardNo", card.CardNo);
    //                //paramDic.Add("cardType", card.CardType.ToString());
    //                //  var rUrl = SendMessageHelper.GetWxRedirectUrlByOpenId(openId, "WxAppoint", "AppointSigninDetail", paramDic);                      
    //                //var rUrl = "";
    //                #endregion

    //                #region 发送预约报道通知

    //                var result = MessageHelper.SendSinginMsg(openId, apptOrder.DeptName,apptOrder.DoctorName,apptOrder.RegDate,apptOrder.StartTime,apptOrder.EndTime);
    //                #endregion

    //                if (result)
    //                {
    //                    signInNotice.IsSended = 1; //已发送
    //                    signInNotice.UpdateTime = System.DateTime.Now;
    //                    signInNotice.SendTime = System.DateTime.Now;
    //                    ctx.SaveChanges();
    //                }

    //                Thread.Sleep(10); 
    //            }
    //        }
    //    }


    //}
}
